package com.weishuang.monitor.leader.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.Page;
import com.weishuang.monitor.leader.commons.entity.BaseEntity;
import com.weishuang.monitor.leader.commons.enums.SCODE;
import com.weishuang.monitor.leader.entity.SysDictData;
import com.weishuang.monitor.leader.entity.dto.DictDataDTO;
import com.weishuang.monitor.leader.mapper.SysDictDataMapper;
import com.weishuang.monitor.leader.service.ISysDictDataService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 数据字典数据 服务实现类
 * </p>
 *
 * @author weishuang
 * @since 2021-03-23
 */
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService {

    @Override
    public Map<String, Object> getDict() {
        Map<String, Object> result = new HashMap<>();
        LambdaQueryWrapper<SysDictData> queryWrapper = Wrappers.lambdaQuery(SysDictData.class);
        queryWrapper.eq(BaseEntity::getStatus,SCODE.STATUS_NORMAL.getValue());
        queryWrapper.orderByAsc(SysDictData::getSort).orderByDesc(BaseEntity::getCreatedTime);
        List<SysDictData> dictDatas = baseMapper.selectList(queryWrapper);
        if(dictDatas != null){
            Map<String, Map<String, String>> dictObj = new HashMap<>();
            Map<String,List<Map<String,String>>> dictArray = new HashMap<>();
            for(SysDictData dd : dictDatas){
                if(!dictObj.containsKey(dd.getDictType())){
                    //添加已对象为主
                    Map<String,String> objItem = new HashMap<>();
                    objItem.put(dd.getDictValue(),dd.getDictLabel());
                    dictObj.put(dd.getDictType(),objItem);

                    //添加已数组为主
                    Map<String,String>  itemArr = new HashMap<>();
                    itemArr.put("value",dd.getDictValue());
                    itemArr.put("label",dd.getDictLabel());
                    List<Map<String, String>> maps = new ArrayList<>();
                    maps.add(itemArr);
                    dictArray.put(dd.getDictType(),maps);
                }else{
                    //添加已对象为主
                    Map<String,String> objItem = dictObj.get(dd.getDictType());
                    objItem.put(dd.getDictValue(),dd.getDictLabel());

                    //添加已数组为主
                    List<Map<String, String>> maps = dictArray.get(dd.getDictType());
                    Map<String,String>  itemArr = new HashMap<>();
                    itemArr.put("value",dd.getDictValue());
                    itemArr.put("label",dd.getDictLabel());
                    maps.add(itemArr);
                }
            }
            result.put("dictObject",dictObj);
            result.put("dictArray",dictArray);
        }
        return result;
    }

    @Override
    public Page<SysDictData> listPageDictData(DictDataDTO dictDataDTO) {
        LambdaQueryWrapper<SysDictData> queryWrapper = Wrappers.lambdaQuery(SysDictData.class)
                .eq(SysDictData::getDictType, dictDataDTO.getDictType())
                .eq(BaseEntity::getStatus, SCODE.STATUS_NORMAL.getValue());
        if (StringUtils.isNotBlank(dictDataDTO.getDictLabel())) {
            queryWrapper.like(SysDictData::getDictLabel, dictDataDTO.getDictLabel());
        }
        if (StringUtils.isNotBlank(dictDataDTO.getDictValue())) {
            queryWrapper.eq(SysDictData::getDictValue, dictDataDTO.getDictValue());
        }
        queryWrapper.orderByAsc(SysDictData::getSort).orderByDesc(BaseEntity::getCreatedTime);
        dictDataDTO.startPage();
        List<SysDictData> sysDictData = baseMapper.selectList(queryWrapper);
        return (Page<SysDictData>) sysDictData;
    }
}
